<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>html5的拖拽api：实现元素拖拽排序</title>
    <style>
        #f1{
            background-color: red;
        }
        #f2{
            background-color: green;
        }
        #f3{
            background-color: pink;
        }
        #f4{
            background-color: rgb(26, 62, 223);
        }
        .list{
            width: calc(5%);
            text-align: center;
            margin: 2px;
            border-radius: 25px;
        }
    </style>
</head>
<body>
    <div>
        为你喜欢的水果排个序吧~
        <div class="list" id="f1" draggable="true">红苹果</div>
        <div class="list" id="f2" draggable="true">青苹果</div>
        <div class="list" id="f3" draggable="true">粉苹果</div>
        <div class="list" id="f4" draggable="true">烂苹果</div>
    </div>
<script>
    var source = document.querySelectorAll('.list'),
    dragElement = null;
    console.log(source) //获取 带有父节点的子节点们；没有父节点就默认body啦~

for(var i = 0; i < source.length; i++){
    source[i].addEventListener('dragstart',function(ev){
        dragElement = this;//使用全局变量标记被拖动的元素
    },false);

    source[i].addEventListener('dragenter', function(ev){
        if(dragElement != this){//屏蔽  被拖动元素的自身ondragenter事件
        
            this.parentNode.insertBefore(dragElement,this);
        }
    }, false)
//添加dragleave事件，解决元素被拖动到最后一个时的排列，注释该段代码后元素无法排列到最后一个
    source[i].addEventListener('dragleave', function(ev){
        if(dragElement != this){    //屏蔽 被拖动元素的自身dragleave事件
        
            if(this == this.parentNode.lastElementChild || this == this.parentNode.lastChild){
                this.parentNode.appendChild(dragElement);
            }
        }
    }, false)
};

document.ondragover = function(e){e.preventDefault();} //禁止 浏览器默认的‘阻止其他元素进入本元素’行为
document.ondrop = function(e){e.preventDefault();} //阻止被拖动元素的默认点击事件。比如拖动超链接后进入ondrop事件 就会触发链接的点击

</script>

    
</body>
</html>
